package servlet;

import controller.ControllerAnnunciLocal;
import controller.ControllerRicercaLocal;
import entity.Adesione;
import entity.Annuncio;
import entity.UtenteRegistrato;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import utilities.AnnuncioConDistanza;
import utilities.Utilities;

/**
 * Servlet con le operazioni per mostrare liste di annunci, ad esempio gli 
 * annunci relativi a una specifica regione.
 * @author Ale
 */
public class MostraAnnuncioServlet extends HttpServlet {

    @EJB
    private ControllerRicercaLocal controllerRicerca;
    @EJB
    private ControllerAnnunciLocal controllerAnnunci;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String action = request.getParameter("action");

        if (action == null) {
            Utilities.errore("Nessuna action specificata alla MostraAnnuncioServlet", request, response);
        } else if (action.equals("mostraAnnunciCreati")) {
            mostraAnnunciCreati(request, response);
        } else if (action.equals("mostraAnnunciIscritto")) {
            mostraAnnunciIscritto(request, response);
        } else if (action.equals("mostraAnnunciRegione")) {
            mostraAnnunciRegione(request, response);
        } else if (action.equals("mostraAnnuncioEsistente")) {
            mostraAnnuncioEsistente(request, response);
        } else if (action.equals("mostraDettagliAnnuncio")) {
            mostraDettagliAnnuncio(request, response);
        } else if (action.equals("mostraAnnunciInScadenza")) {
            mostraAnnunciInScadenza(request, response);
        }
    }

    private void mostraAnnunciCreati(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("show", "creati");
        String idA = request.getParameter("annuncio");
        if (idA != null) {
            Long idAnnuncio = Long.parseLong(idA);
            Annuncio a = controllerAnnunci.getAnnuncio(idAnnuncio);
            request.setAttribute("annuncio", a);
        }
        Utilities.forward("/index.jsp", request, response);
    }

    private void mostraAnnunciIscritto(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("show", "iscritto");
        String idA = request.getParameter("adesione");
        if (idA != null) {
            Long idAdesione = Long.parseLong(idA);
            Adesione a = controllerAnnunci.getAdesione(idAdesione);
            request.setAttribute("adesione", a);
        }
        Utilities.forward("/index.jsp", request, response);
    }

    private void mostraAnnunciRegione(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String regione = request.getParameter("regione");
        int toIndex = 5; //numero di annunci che voglio mostrare
        List<Annuncio> annunci = controllerRicerca.trovaInRegione(Utilities.getUtenteLoggato(request), regione);
        if (annunci.size() - 1 < toIndex) {
            toIndex = annunci.size();
        }
        request.setAttribute("annunci", annunci.subList(0, toIndex));
        Utilities.forward("/WEB-INF/jspf/listaAnnunciRegione.jsp", request, response);
    }

    // ajax
    private void mostraAnnunciInScadenza(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int toIndex = 5; //numero di annunci che voglio mostrare
        List<Annuncio> annunci = controllerRicerca.trovaInScadenza(Utilities.getUtenteLoggato(request));
        if (annunci.size() - 1 < toIndex) {
            toIndex = annunci.size();
        }
        request.setAttribute("annunci", annunci.subList(0, toIndex));
        Utilities.forward("/WEB-INF/jspf/listaAnnunciRegione.jsp", request, response);
    }

    // quando uno crea un annuncio, gli viene detto se per quel sito c'è già un annuncio aperto.
    // se sì, lo si mostra con questo metodo
    private void mostraAnnuncioEsistente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String url = request.getParameter("url");
        UtenteRegistrato ur = Utilities.getUtenteLoggato(request);
        List<AnnuncioConDistanza> ad = controllerRicerca.cercaAperti(ur, url, ur.getIndirizzo().getDescrizione());
        request.setAttribute("annunci", ad);
        Utilities.forward("/risultatiRicercaSemplice.jsp", request, response);
    }

    private void mostraDettagliAnnuncio(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        long idAnnuncio = Long.parseLong(request.getParameter("idAnnuncio"));
        Annuncio annuncio = controllerAnnunci.getAnnuncio(idAnnuncio);
        request.setAttribute("annuncio", annuncio);
        Utilities.forward("/dettagliAnnuncio.jsp", request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    
}
